package org.fujay.langchain4jserver.domain.shared.service;

import java.time.Duration;
import java.util.Optional;

/**
 * 缓存提供者领域服务接口 (由基础设施层实现，适配具体的缓存技术，如 Redis)
 */
public interface CacheProvider {

    /**
     * 从缓存中获取值
     *
     * @param key  缓存键
     * @param type 值的类型
     * @param <T>  值的类型
     * @return Optional 包装的值，如果不存在则为空
     */
    <T> Optional<T> get(String key, Class<T> type);

    /**
     * 将值放入缓存
     *
     * @param key        缓存键
     * @param value      要缓存的值
     * @param expiration 过期时间
     * @param <T>        值的类型
     */
    <T> void put(String key, T value, Duration expiration);

    /**
     * 从缓存中移除值
     *
     * @param key 缓存键
     * @return 如果成功移除返回 true, 否则 false
     */
    boolean remove(String key);

    /**
     * 检查缓存中是否存在指定的键
     *
     * @param key 缓存键
     * @return true 如果存在, false 否则
     */
    boolean exists(String key);
}
